#include<iostream>
#include<map>
#include<set>
#include <c++/vector>
#include <c++/unordered_map>
#include <c++/bits/unordered_map.h>

using namespace std;


/**
 *
 * 方法1：平衡树 set
 * 方法2：懒删除最小堆
 *
 *
 * 方法1:
 * index到number的映射（修改index对应的number）       一对一
 * number到index的映射（找到number对应的最小下标）     一对多
 *
 */
class NumberContainers{
    unordered_map<int ,int> i2n;
    unordered_map<int ,set<int>> n2i;
public:
    NumberContainers(){

    }

    void change(int index,int number){
        //先看一下原来的数有没有
        auto it = i2n.find(index);//find函数返回的是迭代器
        if(it!=i2n.end()){
            n2i[it->second].erase(index);
            it->second=number;//直接在迭代器上修改value
        }else{
            i2n[index]=number;
        }
        n2i[number].insert(index);
    }

    int find(int number){
        auto it=n2i.find(number);
        return it==n2i.end()  || it->second.empty() ? -1:*it->second.begin();//解引用
    }
};